package com.woniuxy.rms.controller;

import com.woniuxy.rms.dto.LoginDTO;
import com.woniuxy.rms.node.PhoneCode;
import com.woniuxy.rms.pojo.Admins;
import com.woniuxy.rms.service.AdminService;
import com.woniuxy.rms.util.DataResult;
import com.woniuxy.rms.util.RegexUtil;
import org.apache.shiro.SecurityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpSession;
import java.util.concurrent.TimeUnit;

/**
 * Auther: ChenGang  <br/>
 * Date: 2020/3/23 0023:下午 8:40  <br/>
 * Description:登录控制层
 */
@Controller
public class LoginController {

    @Autowired
    PhoneCode phoneCode;

    @Autowired
    AdminService adminService;

    @Autowired
    RedisTemplate redisTemplate;
    /**
     * Description : 登录验证  <br/>
     * ChangeLog : 1. 创建 (2020/3/23 0023 下午 8:40 [ChenGang]);
     * @param loginDTO  登录信息封装类
     * @return com.woniuxy.rms.util.DataResult
    */
    @PostMapping("/loginOut")
    @ResponseBody
    public DataResult subLogin(LoginDTO loginDTO){
        return adminService.login(loginDTO);

    }
    /**
     * Description : 管理员注册  <br/>
     * ChangeLog : 1. 创建 (2020/3/29 0029 下午 3:45 [Administrator]);
     * @param admins
     * @return com.woniuxy.rms.util.DataResult
    */
    @PostMapping("/register")
    @ResponseBody
    public DataResult rigester(Admins admins,HttpSession session){
        //获取随机生成的验证码
        String code = null;
        try {
            code = (String) redisTemplate.opsForValue().get(admins.getAccount()+":code");
        } catch (Exception e) {
            e.printStackTrace();
            return DataResult.failed("验证码已失效！");
        }
        //注册业务
        return adminService.rigerter(admins,code);

    }
    /**
     * Description : 退出  <br/>
     * ChangeLog : 1. 创建 (2020/3/31 0031 下午 12:11 [Administrator]);
     *
     * @return java.lang.String
    */
    @GetMapping("/exit")
    public String exit(){
        return "redirect:/system/logout";
    }
    /**
     * Description : 发送短信验证码  <br/>
     * ChangeLog : 1. 创建 (2020/3/29 0029 下午 4:33 [Administrator]);
     * @param phone
     * @return com.woniuxy.rms.util.DataResult
    */
    @GetMapping("/node")
    @ResponseBody
    public DataResult getNode(String phone,String account){
        //手机号验证
        if (!RegexUtil.isMobile(phone)){
            DataResult.failed("手机号格式错误！");
        }
        //获取随机验证码并发送
        DataResult code = PhoneCode.getPhonemsg(phone);
        //验证码发送成功后存进redis中，设置过期时间为5分钟
        if (code.getCode() == 200){
            redisTemplate.opsForValue().set(account+":code",code.getData());//将验证码存进redis中
            redisTemplate.expire(account+":code",5, TimeUnit.MINUTES);//有效时间为5分钟
            return DataResult.success("获取验证码成功！");
        }
        return DataResult.failed("获取验证码失败！");

    }

}